package P08_BlockingQueue阻塞队列;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;

public class P01_BlockingQueueDemo {
    public static void main(String[] args) throws InterruptedException {
        BlockingQueue<String> queue = new ArrayBlockingQueue<>(3);
        // 第一组：add、remove、element
//        System.out.println(queue.add("a")); // true
//        System.out.println(queue.add("b")); // true
//        System.out.println(queue.add("c")); // true
////        System.out.println(queue.element()); // a
////        System.out.println(queue.add("w")); // 报错
//        System.out.println(queue.remove()); // a
//        System.out.println(queue.remove()); // b
//        System.out.println(queue.remove()); // c
//        System.out.println(queue.remove()); // 报错

        // 第二组：offer、poll、peek
//        System.out.println(queue.offer("a")); // true
//        System.out.println(queue.offer("b")); // true
//        System.out.println(queue.offer("c")); // true
//        System.out.println(queue.offer("w")); // false
////        System.out.println(queue.poll()); // a
////        System.out.println(queue.poll()); // b
////        System.out.println(queue.poll()); // c
////        System.out.println(queue.poll()); // null
//        System.out.println(queue.peek()); // a
//        System.out.println(queue.peek()); // a
//        System.out.println(queue.peek()); // a
//        System.out.println(queue.peek()); // a

        // 第三组 put、take
//        queue.put("a");
//        queue.put("b");
//        queue.put("c");
////        queue.put("w"); // 阻塞
//
//        System.out.println(queue.take()); // a
//        System.out.println(queue.take()); // b
//        System.out.println(queue.take()); // c
//        System.out.println(queue.take()); // 阻塞

        // 第四组：超时offer、poll
        System.out.println(queue.offer("a", 1, TimeUnit.SECONDS));
        System.out.println(queue.offer("b", 1, TimeUnit.SECONDS));
        System.out.println(queue.offer("c", 1, TimeUnit.SECONDS));
        System.out.println(queue.offer("w", 1, TimeUnit.SECONDS)); // 阻塞1秒 false
        System.out.println(queue.poll(1, TimeUnit.SECONDS));
        System.out.println(queue.poll(1, TimeUnit.SECONDS));
        System.out.println(queue.poll(1, TimeUnit.SECONDS));
        System.out.println(queue.poll(1, TimeUnit.SECONDS)); // 阻塞1秒 null
    }
}
